#include <stdio.h>
#include <string.h>

// 去除字符串末尾的零和小数点
void trimTrailingZeros(char *str) {
    int len = strlen(str);
    int i = len - 1;

    // 找到最后一个非零字符
    while (i >= 0 && (str[i] == '0' || str[i] == '.')) {
        i--;
    }

    // 如果最后一个字符是小数点，再减去一位
    if (i >= 0 && str[i] == '.') {
        i--;
    }

    str[i + 1] = '\0';
}

// 去除字符串前导零
void trimLeadingZeros(char *str) {
    int len = strlen(str);
    int i = 0;

    // 找到第一个非零字符
    while (i < len && str[i] == '0' && (i + 1 < len && str[i + 1] != '.')) {
        i++;
    }

    // 移动字符串
    for (int j = 0; str[i]; i++, j++) {
        str[j] = str[i];
    }
}

int main() {
    char str1[201], str2[201];

    // 读取输入
    printf("请输入第一个实数: ");
    fgets(str1, sizeof(str1), stdin);
    //该代码用于去除字符串 str1 中的换行符。
    // strcspn(str1, "\n") 返回 str1 中第一个换行符的位置,然后将其替换为字符串结束符 \0，从而截断字符串。
    str1[strcspn(str1, "\n")] = '\0'; // 去除换行符

    printf("请输入第二个实数: ");
    fgets(str2, sizeof(str2), stdin);
    str2[strcspn(str2, "\n")] = '\0'; // 去除换行符

    // 去除末尾零
    trimTrailingZeros(str1);
    trimTrailingZeros(str2);

    // 去除前导零
    trimLeadingZeros(str1);
    trimLeadingZeros(str2);

    // 比较字符串
    if (strcmp(str1, str2) == 0) {
        printf("两个实数完全相等。\n");
    } else {
        printf("两个实数不完全相等。\n");
    }

    return 0;
}
